共计 4400 个字符,预计需要花费 11 分钟才能阅读完成。
更新记录
2024-05-24
raidrive 更建议使用 1.80
版本,此版本不会联网验证。
2023-10-12
问题:文件权限导致报错
在 windows
挂载 webdav 时,在执行远程写入时,文件的属组和属主是 root
。
但是应用程序,例如我的思源笔记数据目录,在启动配置时并未使用 root
用户,会导致在 windows
上新增的文件,web端无法读取,且思源笔记容器重启会发生报错无权限读取 xxx 文件。
即需要注意 webdav 在写入文件时,权限需要和 挂载出来的数据目录的原始权限保持一致,避免发生问题。
2023-10-10
raidrive 从官网下载的免费版广告太多,在软件首页和右下角弹窗会频繁出现,很难忍受。且火绒也无法有效屏蔽弹窗广告。
尝试了两个方案
- 使用 rclone 代替 raidrive
- rclone配置要繁琐一些,需要通过命令行方式配置启动
- 需要写bat来实现后台运行
- 开机自启需要手动添加
- 这点最关键。速度不如raidrive,尝试了很多不同的挂载参数,速率和raidrive有明显的区别,在资源管理器打开webdav目录,或者思源笔记读取时,加载速度极慢
- 尝试去除广告
- 改hosts方式,未生效
- 订阅需要2美刀/月,价格太贵
- 下载无广告版 2020.6.25
-
这里需要注意,不要尝试下载破解版,可能留存后门,泄露webdav的用户信息
- 官方的 2020.6.25 版本无广告,但是官网已经没有入口可以下载
- 有知名的外网第三方下载站,提供各类旧版软件下载,下载链接:uptodown。此下载站风评还可以,请自行甄别安全与否
背景
日常的笔记或文章的撰写,我一般是在私有服务器上部署的思源笔记上进行。文章编辑成功后,会手动发布到 wordpress 站点中。经过几个月的实践,发现存在一些问题:
- 流程繁琐,文章编辑完后需要在笔记服务中手动导出,再导入发布。
- 已发布的文章内容如果更新,需要同样再执行一次导出发布的流程。
- 任一发布平台都需要手动执行,而 wordpress 个人站点其实并不好引流。
近期在思源笔记上发现了一款插件,参考:github 思源笔记发布插件
可以用于发布笔记到各个平台,我简单测试了下,可以满足多平台发布和更新文章的功能。
但是该插件只支持 PC端
,而私有化部署的思源笔记只能通过 web端
访问,真令人头大。要知道市面上其实并没有太多好用的多发工具,难得有一个免费好用的,却不能实施在现有环境下太可惜了。
思来想去,决定通过 webdav
的方式,将服务端的笔记数据目录使用映射到外网,再通过修改 PC端
的数据空间为服务端映射出的目录,直接在 PC端
共享使用服务端的数据。
这样做可能会存在数据损坏的弊端,参考:github 思源笔记
但是我已经通过计划任务定期备份数据。并且我会保持在 web端
进行编辑,在 PC端
仅发布。降低多端同时变更数据的风险。
牺牲一些安全性,可以极大提高便利性,值得做!
实施
webdav 是什么
WebDAV(Web Distributed Authoring and Versioning)是一种用于在Web上进行文件管理和协作的协议。它扩展了HTTP(Hypertext Transfer Protocol)协议,允许用户通过HTTP协议对远程服务器上的文件进行读取和写入操作。
架设 webdav 服务端
服务端可以由多种方式实现,我测试过两种方式:
- nginx & apache
- github webdav,这是社区一个使用 golang 实现的服务端
nginx
最终并没有采用 nginx 方式,不想下功夫来进行源码编译了,大概介绍下实现过程。
在使用 nginx 架设 webdav 时,需要手动进行源码编译,引入两个模块:--with-http_dav_module
和 --nginx-dav-ext-module
。
使用 nginx -V
命令可确定当前二进制的编译参数。
最终配置文件如下:
# cat webdav.conf
server {
listen 443 ssl http2;
server_name ***.***;
ssl_certificate /root/.acme.sh/***.***/fullchain.cer;
ssl_certificate_key /root/.acme.sh/***.***/***.***.key;
ssl_session_timeout 5m;
ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
charset utf-8;
error_page 405 =200 @405;
location / {
auth_basic "请输入用户和密码";
auth_basic_user_file /etc/nginx/password;
charset utf-8;
autoindex on;
dav_methods PUT DELETE MKCOL COPY MOVE PROPFIND;
create_full_put_path on;
dav_access user:rw group:rw all:r;
dav_ext_methods PROPFIND OPTIONS;
client_max_body_size 100000M;
root /siyuan_note_pyw;
}
}
dav_ext_methods PROPFIND OPTIONS;
依赖于nginx-dav-ext-module
其他 dav 相关参数依赖于 with-http_dav_module
Go webdav server
服务端部署
# 下载包
mkdir /usr/local/webdav && cd /usr/local/webdav
wget https://github.com/hacdias/webdav/releases/download/v4.2.0/linux-amd64-webdav.tar.gz
tar xf linux-amd64-webdav.tar.gz
# 拷贝至环境变量目录
cp webdav /usr/bin/webdav
# 编辑配置文件,仅配置最简单的参数,更细致的配置参考 github
# vim /usr/local/webdav/config.yaml
address: 0.0.0.0
port: 47878
auth: true
tls: false
cert: cert.pem
key: key.pem
# Default user settings (will be merged)
scope: .
modify: true
rules: []
users:
- username: pengyinwei
password: testpassword
scope: /siyuan_note_pyw
部署流程很简单,配置文件未进行过于复杂的配置,仅个性化配置了端口、鉴权、映射目录。
# 命令行方式启动确认配置文件是否正确
/usr/bin/webdav --config /usr/local/webdav/config.yaml
2023-10-06T21:23:30.357+0800 info Listening {"address": "[::]:47878"}
systemd 配置
命令行方式启动只是用于临时测试,最佳实践是使用 systemd 管理 webdav。
# 编辑配置文件
# vim /etc/systemd/system/webdav.service
[Unit]
Description=WebDAV server
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/webdav --config /usr/local/webdav/config.yaml
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 启动 webdav
systemctl start webdav.service
# 配置开机自启
systemctl enable webdav.service
# 查看服务状态
systemctl status webdav.service
nginx 反代
IP,证书等请替换为自己的配置
# vim webdav.***.conf
upstream webdav-local {
server 192.168.2.11:47878;
}
server {
listen 80;
server_name webdav-local.***.***;
return 301 https://webdav-local.***.***$request_uri;
}
server {
listen 443 ssl http2;
server_name webdav-local.***.***;
ssl_certificate /root/.acme.sh/*.***.***/fullchain.cer;
ssl_certificate_key /root/.acme.sh/*.***.***/*.***.***.key;
ssl_session_timeout 5m;
ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://webdav-local;
}
}
Win 10 挂载 webdav 为本地磁盘
使用 RaiDrive
软件,可以方便的挂载各类网盘或 webdav 为本地磁盘。
官方免费版下载链接:raidrive 官网 (广告多)
2020.06.25 旧版下载链接:uptodown (无广告)
安装完毕后,添加 webdav 挂载配置
点击 连接
进行挂载,最终效果如下:
思源 PC端 配置工作空间
配置完毕后,即可在 PC端
直接读取 服务端 的数据。也可以愉快的使用插件进行文章的多平台发布。
结论
只要数据在自己手中,方法总比困难多。下个阶段会实测文章多发的效果,待我后续更新吧。